package org.forever.util
{
	/**
	* （有向）图结构接口
	*	无向图也可以看成是有向图，为此，只需将每条无向边替换为对称的一对有向边
	*/
	public interface Graph
	{
		 /**取图中顶点的数目*/
		 function vNumber():int;
		 /**取图中边的数目*/
		 function eNumber():int;
		 /**取图中所有顶点的迭代器*/
		 function vertices():Iterator;
		 /**取图中所有顶点位置的迭代器*/
		 function vPositions():Iterator;
		/**返回图中所有边迭代器*/
		 function edges():Iterator;
		 /**返回图中所有边位置的迭代器*/
		 function ePositions():Iterator;
		/**检测是否有某条边从顶点u指向v*/
		 function areAdjacent(u:Vertex, v:Vertex):Boolean;
		/**取从顶点u指向v的边，若不存在，则返回null*/
		 function edgeFromTo(u:Vertex, v:Vertex):Edge;
		/**将顶点v从顶点集中删除，并返回之*/
		 function removeV(v:Vertex):Vertex;
		/**将边e从边集中删除，并返回之*/
		 function removeE(e:Edge):Edge;
		/**在顶点集V中插入新顶点v，并返回其位置*/
		 function insertV(v:Vertex):Position;
		/**在边集E中插入新边e，并返回其位置*/
		 function insertE(e:Edge):Position;
	}
}